DoctrineのEntity Manager
Entityを管理するobject
DBとEntityの仲介をする
コード内では$emという名前で変数に入れられる事が多い
DBに保存する流れ
Entityをinstantiateして、それに対してゴニョって値の更新などを行う
保存したいinstanceにpersist()を適用する
新しくなったEntityがDoctrineの管理下に入る
元のEntityとの差分などを管理している
flush()を実行する
差分を実際にDBに適用する
SQLを発行してごにょごにょというのを勝手にやっている
このタイミングで初めてDBが更新される
code:ノリ.php
$inquiry = new InruiryEntity();
$inquiry->setName('hoge'); // Entityを更新
..
$em = $this->getDoctrine()->getManager(); // entity managerを取得
$em->persist($inquiry); // emに入れる
$em->flush(); // DBを更新
既存のdataの1つpropertyだけ更新したいときも新しくinstantiateしないといけないの?
新しくinstantiateするか、
既存のやつをどこかから(e.g. FormBuilderで作ったform)持ってきて、setHogeして、persistする感じか
DBから読み込むときの流れ
DBに入っていることを意識せず、Entity Managerに入っているものとして扱う
repositoryを取得
repositoryに対してfindなどをする
code:ノリ.php
$em = $this->getDoctrine()->getManager(); // entity managerを取得
$hogeRepository = $em->getRepository('Hoge');
$list = $hogeRepository->find(...);
flush()の引数